home *** CD-ROM | disk | FTP | other *** search
/ MacWorld 1999 November / Macworld (1999-11).dmg / Updaters / WhiteCap 3.0.4 / WhiteCap Source.sit / WhiteCap Source / Common / General Tools / Headers / XFloatList.h < prev    next >
Text File  |  1999-07-13  |  2KB  |  59 lines

  1. #ifndef _XFloatList_
  2. #define _XFloatList_
  3.  
  4. // by Andrew O'Meara
  5.  
  6. #include "XPtrList.h"
  7.  
  8. class XLongList;
  9.  
  10.  
  11. class XFloatList {
  12.     
  13.     friend class XFloatList;
  14.  
  15.     public:
  16.                                 XFloatList( ListOrderingT inOrdering = cOrderNotImportant );        // See XPtrList.h for ListOrderingT choices
  17.                                 
  18.         // See XPtrList.h for description of functions.
  19.         virtual long            Add( float inNum )                                { return mList.Add( *((void**) &inNum) );            }
  20.         virtual void            Add( const XFloatList& inList )                    { mList.Add( inList.mList );                        }
  21.         virtual bool            RemoveElement( long inIndex )                    { return mList.RemoveElement( inIndex );            }
  22.         virtual void            RemoveAll()                                        { mList.RemoveAll();                                 }
  23.         virtual float            Fetch( long inIndex )                            { long t = (long) mList.Fetch( inIndex ); return *((float*) &t);}
  24.         virtual bool            Fetch( long inIndex, float* ioPtrDest ) const    { return mList.Fetch( inIndex, (void**)ioPtrDest );    }
  25.         virtual long            Count()    const                                    { return mList.Count();                                }
  26.  
  27.         //    Post: Ranks all the values in this list.
  28.         //    Post: Fetch( outRank[ i ] ) is the ith largest value in this list.
  29.         //    Post: outRank.Count() == inNumToRank  (ie, only inNumToRank values of the ranking are returned)
  30.         //    Note: If inNumToRank is invalid, the full ranking is returned
  31.         //    Note: O( N log N ) running time
  32.         void                    Rank( XLongList& outRank, long inNumToRank = -1 ) const;
  33.         
  34.         // Computes a specified number of values that represent center-values for that current list of floats
  35.         // Note: if this float list isn't already sorted from LowToHigh, GetMeans() will have to perform a full sort!!
  36.         void                    FindMeans( long inNumMeans, float outMeans[], float inSigmaScale = 0.05 ) const;
  37.  
  38.         // Smoothes all the floats in this list
  39.         void                    GaussSmooth( float inSigma );
  40.  
  41.         float                    operator[] ( const long inIndex )                { long t = (long) mList.Fetch( inIndex ); return *((float*) &t); } 
  42.         
  43.         // Generic utility fcn to gauss-smooth a 1D curve.
  44.         static void                GaussSmooth( float inSigma, long inN, float inSrceDest[] );
  45.         static void                GaussSmooth( float inSigma, long inN, float inSrce[], float inDest[] );
  46.  
  47.         
  48.     protected:
  49.         static int                sFloatComparitor( const void* inA, const void* inB );
  50.         static int                sQSFloatComparitor( const void* inA, const void* inB );
  51.         
  52.         XPtrList                mList;
  53.         
  54. };
  55.  
  56.  
  57.  
  58.  
  59. #endif